2013-06-11 41 views

Trả lời

8

Thêm khóa ngoại vào Bản đồ tham chiếu Khóa chính của Khu vực. Điều đó sẽ thực thi mối quan hệ một-nhiều giữa Bản đồ và các khu vực.

Để thực thi tối thiểu một bản đồ cho mỗi khu vực (nếu cần thiết), có một số ý tưởng trong bài đăng này here. Một trong những giải pháp đơn giản hơn sẽ tạo ra một cái nhìn mà chỉ hiển thị khu vực đã có bản đồ:

CREATE VIEW viewAreas AS 
SELECT * 
FROM Areas, Maps 
WHERE Areas.ID = Maps.AreaID; 

Bằng cách này, bạn có thể tạo ra một khu vực, và sau đó thêm các bản đồ với nó. Bạn cũng có thể thực thi Khóa ngoại trong bản đồ thành NOT NULL, vì vậy bản đồ phải luôn có một khu vực.

+0

Để tâm trí của tôi, kích hoạt giải pháp postet sau đó là phù hợp nhất. Cảm ơn câu trả lời của bạn! – tellob

2

Mỗi bảng cho Bản đồ và Khu vực, có khóa ngoài trên Bản đồ liên kết với Khu vực.

+0

Điều này có nghĩa là tôi đã có ID vùng trong Bảng bản đồ của mình? – tellob

+0

@tellob: Vâng, chính xác. –

+0

Nhưng không phải điều này chỉ đảm bảo rằng bản đồ có một khu vực? làm thế nào nó an toàn, rằng một khu vực cũng có một bản đồ, khi nó được tạo ra? – tellob

11
create table Area(id int primary key auto_increment, name varchar(100)); 

create table Map(id int primary key auto_increment, 
       area_id int not null, 
       name varchar(100), 
       foreign key (area_id) references area(id)); 

SqlFiddle

Mỗi Map PHẢI có một Area, như area_id không phải là null (và là một Foreign key trên Area)

Nhưng bạn sẽ không thể (và nó không mong muốn) để có "ít nhất một bản đồ" cho từng khu vực.

Một ngày, bạn sẽ phải tạo một Area. Và nó sẽ không có bất kỳ Map vào lúc này. Hoặc thực hiện kiểm tra "thường xuyên" để xem Khu vực không có bất kỳ Bản đồ nào.

Bạn có thể muốn xóa Area, nếu nó không có liên quan nhiều hơn Map, khi bạn xóa Map.

+0

Vì vậy: Tôi không thể xây dựng một thứ như: Một khu vực phải có bản đồ? Tôi chỉ có thể đảm bảo, rằng một bản đồ có một khu vực cho đến nay? – tellob

+0

@tellob. Vâng. Ít nhất là ở cấp độ db. Bạn có thể quản lý loại kiểm tra này ở cấp ứng dụng, thay vào đó. –

+1

Tôi biết bạn đến từ đâu nhưng không chắc tôi đồng ý. Lập luận này, nếu theo sau cho tất cả các mục có xu hướng dẫn đến không có mối quan hệ nước ngoài được yêu cầu. Tôi nghĩ tốt hơn là yêu cầu và xử lý công việc, ví dụ: tạo con đầu tiên, sau đó cha mẹ và chỉ định đứa trẻ tại thời điểm đó. Tránh xác thực vì 'một ngày' bạn sẽ cần một bản ghi trống đã không hoạt động tốt cho tôi trong quá khứ. –

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