Có bất kỳ công cụ cơ sở dữ liệu nào sẽ điều chỉnh điều kiện tham gia dựa trên các khóa ngoại hiện có không?


11

Có vẻ lạ đối với tôi, khi tôi đã xác định khóa ngoại, động cơ không thể sử dụng thông tin này để tự động tìm ra các biểu thức THAM GIA chính xác, nhưng thay vào đó yêu cầu tôi nhập lại các mệnh đề tương tự. Có bất kỳ cơ sở dữ liệu, có lẽ một số loại dự án nghiên cứu, sẽ kiểm tra các khóa ngoại hiện có?

Câu trả lời:


4

Tôi không biết bất kỳ khóa nào sử dụng khóa ngoại (và điều đó có thể lộn xộn nếu bạn có nhiều hơn một khóa ngoại trở lại cùng một bảng)

Nhưng Oracle sẽ căn cứ vào tên của các cột nếu bạn không chỉ định loại tham gia cụ thể cũng như điều kiện tham gia hoặc nếu bạn sử dụngNATURAL JOIN


Tại sao nó sẽ lộn xộn nếu bạn có nhiều hơn một khóa ngoại cho cùng một bảng. Nếu bạn đang xem xét nó từ phối cảnh bảng "cha mẹ" thì vẫn nên rõ ràng về bản ghi nào ở đứa trẻ mà bạn quan tâm.
Beth Whitezel

@Bitoff bạn có thể có nhiều hơn một mối quan hệ giữa hai bảng và do đó không phải là khóa tổng hợp, nhưng thực tế có nhiều hơn một khóa ngoại đối với bảng con. Ví dụ, trong một công việc trước đây, chúng tôi có cơ sở dữ liệu về các tổ chức và trong bảng đó có hai liên kết đến bảng người của tôi - trưởng bộ phận và liên hệ chính (thường là thư ký). Có một khóa ngoại theo hướng ngược lại, khi các nhân viên được chỉ định cho một bộ phận, cho đến khi chúng tôi phải chia nó ra để hỗ trợ các mối quan hệ nhiều-nhiều.
Joe

Tôi biết không có RDBMS thông thường nào làm điều này - như câu hỏi nêu, tôi đặt câu hỏi ra để xem có ai nghe thấy bất cứ điều gì mới trong lĩnh vực này không.
TML

1
-1 Điều này không đúng về hành vi của Oracle và câu trả lời của bạn cũng không liên quan. Như Gary đã chỉ ra (bình luận thứ ba cho câu trả lời của bạn), " natural joinchưa bao giờ là mặc định". Ngẫu nhiên, Tom Kyte chắc chắn đúng khi anh ta gọi natural join một lỗi đang chờ xảy ra
Jack nói hãy thử topanswers.xyz

4

sẽ được thực sự mát nếu tôi có thể viết này

from calendar join table1

và các dbms sẽ biết rằng nó cần phải đánh giá điều này.

from calendar
left join table1 on (work_date between (cal_date - 13) and cal_date)

Thật tuyệt Nhưng không phải mọi tham gia đều là một đẳng thức .

FWIW, NATURAL JOINlà trong tiêu chuẩn SQL. Nhưng tôi khá chắc chắn rằng tôi đã không sử dụng nó trong 25 năm qua.

Nếu bạn thấy mình viết cùng một mệnh đề tham gia nhiều lần, có lẽ bạn chỉ cần nhiều lượt xem hơn.


3

Có các tiện ích tự động hoàn thành cho trình soạn thảo lựa chọn của bạn để tự động đề xuất các câu lệnh nối phù hợp nếu gõ là mối quan tâm. Lời nhắc SQL của RedGate để xử lý SQL Server trong SSMS & Visual Studio. Tôi tin rằng TOAD của Quest sẽ xử lý Oracle và một số RDMS phổ biến khác.


Không có "mối quan tâm" thực sự, chỉ tự hỏi liệu đây có phải là điều mà bất cứ ai đang tìm cách giải quyết.
TML

@TML Tôi nghi ngờ bất cứ ai lo lắng về điều này vì đây thực sự là lĩnh vực logic ứng dụng theo hiểu biết của tôi (trong đó logic ứng dụng là những thứ không liên quan đến việc chạy máy chủ cơ sở dữ liệu, những điều chúng tôi được trả tiền để làm)
jcolebrand
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.