2009-06-07 70 views
5

Aheo hỏi xem đó có phải là ok to have a table with just one column hay không. Làm thế nào về một không có cột, hoặc, cho rằng điều này có vẻ khó khăn để làm trong hầu hết các DBMS "quan hệ" hiện đại, một mối quan hệ không có thuộc tính?Quan hệ với không có thuộc tính

+0

Điều đó có nghĩa là gì? "Mối quan hệ không có thuộc tính là gì?" Bạn có thể đưa ra bất kỳ loại ví dụ thực tế nào không? –

+0

Tôi nghĩ rằng vấn đề là không có ví dụ thế giới thực ... – jerryjvl

+2

"TẠO TABLE dee()" theo sau là "INSERT INTO DEE VALUES()" nên thực hiện thủ thuật, nếu DBMS của bạn thực sự quan hệ. –

Trả lời

2

Sản phẩm DEE và Descartes tạo thành một monoid. Trong thực tế, nếu bạn có toán tử tóm tắt quan hệ ngày tháng, bạn sẽ sử dụng DEE làm quan hệ nhóm của bạn để có được các tổng số lớn. Có nhiều ví dụ khác mà DEE thực tế hữu ích, ví dụ: trong một thiết lập chức năng với một toán tử nối nhị phân, bạn sẽ nhận được tham số nhị phân join = foldr tham gia dee

3

Một bảng có một cột đơn là một tập hợp - miễn là bạn không quan tâm đến việc sắp xếp các giá trị hoặc kết hợp bất kỳ thông tin nào khác với chúng, có vẻ như tốt. Bạn có thể kiểm tra tư cách thành viên trong đó, và về cơ bản đó là tất cả những gì bạn có thể làm. (Nếu bạn không có một ràng buộc UNIQUE trên cột đơn, tôi đoán bạn cũng có thể đếm số lần xuất hiện ... một multiset).

Nhưng những gì trong đám cháy sẽ một bảng không có cột (hoặc một mối quan hệ không có thuộc tính) nghĩa - hoặc, làm thế nào nó sẽ là bất kỳ tốt ?!

+1

Điều đó có ý nghĩa gì và có hay không là hai điều hoàn toàn khác nhau ... –

+0

Và đó là lý do tại sao tôi hỏi cả hai câu hỏi (tham gia bởi một OR, ;-) - nếu một trong hai câu hỏi có câu trả lời hay, tôi muốn nghe nó! -) –

+2

Ah, bây giờ tôi được tiết lộ bí mật. :-) Điều này có nghĩa là quan hệ (hoặc "bảng") có chứa một tuple hợp lệ (hoặc "hàng") hoặc nó không có. Đó là kiểu quan hệ boolean. –

0

Hm. Vì vậy, việc thiếu các "ví dụ thực tế" đã đến với tôi, và tôi đã cố gắng hết sức. Có lẽ đáng ngạc nhiên, tôi có một nửa ở đó!

 
cjs=> CREATE TABLE D(); 
CREATE TABLE 
cjs=> SELECT COUNT (*) FROM D; 
count 
------- 
    0 
(1 row) 

cjs=> INSERT INTO D() VALUES(); 
ERROR: syntax error at or near ")" 
LINE 1: INSERT INTO D() VALUES(); 
+0

Tôi đã nhận thấy rằng một số hệ thống cơ sở dữ liệu sẽ không chấp nhận câu lệnh 'CREATE' không có cột, và một số làm nhưng sau đó không chấp nhận câu lệnh' INSERT' có giá trị bằng không. – seh

3

Có chính xác hai mối quan hệ không có thuộc tính, một với một bộ trống và một không có. Trong số The Third Manifesto, Ngày và Darwen (phần nào) đã đặt tên cho chúng là TABLE_DEETABLE_DUM (tương ứng).

Chúng hữu ích trong phạm vi chúng là danh tính của một loạt các toán tử quan hệ, đóng vai trò tương đương với 1 và 0 trong đại số thông thường.

0

Một bảng có một cột sẽ có ý nghĩa như một tra cứu đơn giản. Giả sử bạn có danh sách các chuỗi bạn muốn lọc đối với văn bản được nhập của người dùng. Bảng đó sẽ lưu trữ các từ bạn muốn lọc ra.

+0

Nhưng đó là một bảng với một cột nhiều hơn cột với không có cột, mà là trên quan tâm ở đây. Tuy nhiên, bạn đã khám phá ra ý tưởng về một vị từ trong một thế giới quan hệ, điều đó là tốt. –

2

"Có chính xác hai quan hệ không có thuộc tính, một với một bộ trống và một không có. Ngày và Darwen (phần nào) đã đặt tên chúng là TABLE_DEE và TABLE_DUM (tương ứng)

Chúng hữu ích trong phạm vi chúng là danh tính của một loạt các toán tử quan hệ, đóng vai trò tương đương với 1 và 0 trong đại số bình thường. "

Và tất nhiên, chúng cũng đóng vai trò "TRUE" và "FALSE" trong đại số boolean. Có nghĩa là chúng hữu ích khi các mệnh đề như "Cửa hàng mở" và "Báo thức được thiết lập" sẽ được thể hiện trong cơ sở dữ liệu. Một hệ quả của điều này là chúng cũng có thể được sử dụng một cách hữu ích trong bất kỳ biểu thức nào của đại số quan hệ cho các thuộc tính của chúng về "hoạt động như một IF/ELSE": tham gia vào TABLE_DUM có nghĩa là không giữ tuples nào từ đối số khác, tham gia TABLE_DEE có nghĩa là giữ lại tất cả. Vì vậy, tham gia R với một relvar S có thể bằng TABLE_DEE hoặc TABLE_DUM, là RA tương đương với "nếu S sau đó R khác FI", với FI đứng cho quan hệ trống rỗng.

0

Rất khó để thấy tiện ích của TABLE_DEE và TABLE_DUM từ phối cảnh Cơ sở dữ liệu SQL. Sau khi tất cả nó không được đảm bảo rằng nhà cung cấp db yêu thích của bạn cho phép bạn tạo một hoặc khác.

Cũng rất khó để thấy tiện ích của TABLE_DEE và TABLE_DUM trong đại số quan hệ. Người ta phải nhìn xa hơn thế.Để giúp bạn có được một hương vị như thế nào các hằng số có thể trở nên sống động xem xét đại số quan hệ đưa vào hình dạng toán học thích hợp, đó là gần như nó có thể đại số Boolean. D & D Đại số A là một bước theo hướng này. Sau đó, người ta có thể thể hiện các hoạt động đại số cổ điển quan hệ thông qua các phép toán cơ bản hơn và hai hằng số trở nên thực sự tiện dụng.

Các vấn đề liên quan