2012-03-09 838 views
11

Một số người thích mô tả cấu trúc cơ sở dữ liệu của họ theo cách văn bản đơn giản thay vì sử dụng câu lệnh CREATE TABLE. Một vài ví dụ:Ngôn ngữ định nghĩa dữ liệu SQL đơn giản/tốc ký?

Bạn có biết về bất kỳ phần mềm giúp chuyển đổi kiểu ký hiệu này các kí hiệu để câu lệnh SQL thực tế ?

+0

Có một số công cụ có thể làm ngược lại (dưới dạng hình ảnh, tôi không biết ký hiệu viết tắt). Tạo một cơ sở dữ liệu (với các câu lệnh SQL hoặc với GUI) và công cụ tạo một bản vẽ các bảng. Xem [câu hỏi này] (http://stackoverflow.com/questions/8895806/how-to-implement-polymorphic-associations-in-an-existing-database/9449031#9449031). Tôi nghĩ rằng OP đã sử dụng Visio. Hình ảnh trong câu trả lời của tôi đã được làm cho MySQL Workbench của tôi. –

+0

Có, có rất nhiều giải pháp cơ sở dữ liệu của bạn, nhưng rất ít (nếu có?) Hoạt động mà không cần sử dụng chuột của bạn. – biziclop

+0

Hầu hết các công cụ tôi đã sử dụng đều có thể đọc được những câu lệnh SQL cũ đơn giản. Và nhiều công cụ có kỹ thuật đảo ngược truy xuất SQL tạo bảng từ cơ sở dữ liệu hiện có. Và có thể vẽ các sơ đồ đẹp. –

Trả lời

7

Thực ra, tôi vừa hoàn thành việc tạo ra một kịch bản php, mà thực hiện chính xác này, nhưng tôi hy vọng có cái gì đó chuyên nghiệp hơn ngoài kia ...

Demo của chuyển đổi của tôi:

http://simpleddl.orgfree.com

Ví dụ đầu vào:

= ID id P AI 

person 
    ID 
    mother_id -> person 
    father_id -> person 
    !FK mother_id, father_id -> family U:C, D:C 

family 
    P female_id -> person 
    P male_id -> person 

Output:

CREATE TABLE IF NOT EXISTS person (
    id   INT NOT NULL AUTO_INCREMENT, 
    mother_id INT NOT NULL, 
    father_id INT NOT NULL, 
    PRIMARY KEY (id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 

CREATE TABLE IF NOT EXISTS family (
    female_id INT NOT NULL, 
    male_id INT NOT NULL, 
    PRIMARY KEY (female_id, male_id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

ALTER TABLE person ADD FOREIGN KEY (mother_id) REFERENCES person(id); 
ALTER TABLE person ADD FOREIGN KEY (father_id) REFERENCES person(id); 
ALTER TABLE person ADD FOREIGN KEY (mother_id, father_id) REFERENCES family(female_id, male_id) ON DELETE CASCADE ON UPDATE CASCADE; 

ALTER TABLE family ADD FOREIGN KEY (female_id) REFERENCES person(id); 
ALTER TABLE family ADD FOREIGN KEY (male_id) REFERENCES person(id); 
+1

Điều đó khá thú vị. Nó có hỗ trợ DBMS khác (ví dụ: PostgreSQL) không? –

+0

Liên kết trên hết hạn trong khi đó. Nếu bạn quan tâm, hãy viết bình luận ở đây :) – biziclop

+0

biziclop Tôi muốn xem ý tưởng mã và ký hiệu của bạn (tôi thực sự quan tâm đến ddl cho oracle tại thời điểm này), bạn có điều này trong một kho lưu trữ công cộng ở bất cứ đâu? – plockc

2

Tôi thấy bạn đã đề cập công cụ chuyển văn bản thành ddl có sẵn trên http://sqlfiddle.com. Đây thực sự là công cụ tôi xây dựng (sqlfiddle.com là trang web của tôi) trong JavaScript đặc biệt để cố gắng làm cho các bảng văn bản dễ dàng hơn trong các câu hỏi StackOverflow của họ và nhanh chóng dịch chúng thành DDL thực. Tôi nghĩ rằng nó hoạt động khá tốt cho một số tiền hợp lý của biến thể phổ biến của các định dạng bảng văn bản, nhưng tôi chắc chắn rằng nó có thể sử dụng một số công việc để xử lý nhiều hơn. Tôi hỗ trợ các loại DDL khác nhau thông qua các mẫu handlebars.js riêng biệt cho mỗi loại (MS SQL, Oracle, PostgreSQL, MySQL và SQLite).

Toàn bộ thư viện được viết dưới dạng JavaScript, vì vậy nếu có ai đó muốn giúp tôi cải thiện, tôi rất thích đóng góp của bạn. Fork me on github và tìm tệp javascripts/ddl_builder.js. Tôi rất thích có một số yêu cầu kéo!

+0

Hi, cảm ơn bạn đã trả lời và sqlfiddle của bạn! :) – biziclop