Nếu tôi có một bảng trong MySQL đại diện cho một lớp cơ sở, và tôi có một loạt các bảng biểu diễn các trường trong các lớp dẫn xuất, mỗi bảng tham chiếu trở lại bảng cơ sở với khóa ngoài, có cách nào để có được MySQL để thực thi mối quan hệ một-một giữa bảng dẫn xuất và bảng cơ sở, hay điều này phải được thực hiện trong mã?Các khóa ngoài của MySQL - cách thực thi một đối một trên các bảng?
Sử dụng lược đồ bẩn 'n' nhanh sau đây làm ví dụ, có cách nào để nhận MySQL để đảm bảo rằng các hàng trong cả product_cd và product_dvd không thể chia sẻ cùng một product_id không? Có cách nào tốt hơn để thiết kế lược đồ để cho phép cơ sở dữ liệu thực thi mối quan hệ này hay không đơn giản là không thể?
CREATE TABLE IF NOT EXISTS `product` (
`product_id` int(10) unsigned NOT NULL auto_increment,
`product_name` varchar(50) NOT NULL,
`description` text NOT NULL,
PRIMARY KEY (`product_id`)
) ENGINE = InnoDB;
CREATE TABLE `product_cd` (
`product_cd_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`product_id` INT UNSIGNED NOT NULL ,
`artist_name` VARCHAR(50) NOT NULL ,
PRIMARY KEY (`product_cd_id`) ,
INDEX (`product_id`)
) ENGINE = InnoDB;
ALTER TABLE `product_cd` ADD FOREIGN KEY (`product_id`)
REFERENCES `product` (`product_id`)
ON DELETE RESTRICT ON UPDATE RESTRICT ;
CREATE TABLE `product_dvd` (
`product_dvd_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`product_id` INT UNSIGNED NOT NULL ,
`director` VARCHAR(50) NOT NULL ,
PRIMARY KEY (`product_dvd_id`) ,
INDEX (`product_id`)
) ENGINE = InnoDB;
ALTER TABLE `product_dvd` ADD FOREIGN KEY (`product_id`)
REFERENCES `product` (`product_id`)
ON DELETE RESTRICT ON UPDATE RESTRICT ;
@Skliwz, bạn có thể vui lòng cung cấp chi tiết hơn về cách trigger có thể được sử dụng để thực thi các hạn chế này với sơ đồ cung cấp?
@boes, điều đó thật tuyệt vời. Làm thế nào nó hoạt động trong các tình huống mà bạn có con của một đứa trẻ? Ví dụ: nếu chúng tôi đã thêm product_movie và tạo product_dvd là con của product_movie? Nó sẽ là một cơn ác mộng bảo trì để làm cho các ràng buộc kiểm tra cho product_dvd có yếu tố trong tất cả các loại trẻ em là tốt?
Sử dụng nhận xét thay vì chỉnh sửa câu hỏi của bạn. – epochwolf