我有三张桌子:
地址
CREATE TABLE IF NOT EXISTS `main`.`address` (
`id` BIGINT NOT NULL AUTO_INCREMENT ,
`street_number` VARCHAR(5) NOT NULL ,
`street_name` VARCHAR(255) NOT NULL ,
`town_village` VARCHAR(50) NOT NULL ,
`county` VARCHAR(50) NOT NULL ,
`country` VARCHAR(45) NOT NULL ,
`postcode` VARCHAR(10) NOT NULL ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `street_number_UNIQUE` (`street_number` ASC, `street_name` ASC, `town_village` ASC, `county` ASC, `country` ASC, `postcode` ASC) )
ENGINE = InnoDB
**Geolocation**
CREATE TABLE IF NOT EXISTS `warrington_main`.`address` (
`id` BIGINT NOT NULL AUTO_INCREMENT ,
`street_number` VARCHAR(5) NOT NULL ,
`street_name` VARCHAR(255) NOT NULL ,
`town_village` VARCHAR(50) NOT NULL ,
`county` VARCHAR(50) NOT NULL ,
`country` VARCHAR(45) NOT NULL ,
`postcode` VARCHAR(10) NOT NULL ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `street_number_UNIQUE` (`street_number` ASC, `street_name` ASC, `town_village` ASC, `county` ASC, `country` ASC, `postcode` ASC) )
ENGINE = InnoDB
**Image**
CREATE TABLE IF NOT EXISTS `warrington_main`.`image` (
`id` MEDIUMINT(8) UNSIGNED NOT NULL AUTO_INCREMENT ,
`alias_title` VARCHAR(255) NOT NULL ,
`title` VARCHAR(100) NOT NULL ,
`description` VARCHAR(2000) NOT NULL ,
`main_image` VARCHAR(50) NOT NULL ,
`thumbnail_image` VARCHAR(50) NOT NULL ,
`thumbnail_image_medium` VARCHAR(50) NOT NULL ,
`thumbnail_image_small` VARCHAR(50) NOT NULL ,
`thumbnail_image_gallery` VARCHAR(50) NOT NULL ,
`hits` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0' ,
`show_comment` ENUM('0','1') NOT NULL ,
`section` TINYINT(2) UNSIGNED NOT NULL ,
`flickr_youtube_id` VARCHAR(20) NOT NULL ,
`feature_in_gallery` ENUM('0','1') NOT NULL ,
`created_on` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' ,
`date_taken` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' ,
`updated_on` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00' ,
`updated_by` MEDIUMINT(8) UNSIGNED NOT NULL ,
`approved` ENUM('Inprocess','Yes','No') NOT NULL DEFAULT 'Inprocess' ,
`visible` ENUM('0','1') NOT NULL DEFAULT '0' ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `alias_title` (`alias_title` ASC) ,
UNIQUE INDEX `flickr_youtube_id` (`flickr_youtube_id` ASC) ,
INDEX `title` (`title` ASC) ,
INDEX `approved` (`approved` ASC) ,
INDEX `visible` (`visible` ASC) ,
INDEX `feature_in_gallery` (`feature_in_gallery` ASC) )
ENGINE = InnoDB
AUTO_INCREMENT = 23162
DEFAULT CHARACTER SET = utf8
现在每个图像都可以有一个地理位置和一个地址。我打算创建另一个名为 location 的表。
我打算为地理位置和地址创建具有可选关系的位置。所以换句话说,位置可以是地理位置或地址或两者兼而有之。不过,我不想存储 null/null。第一个问题是如何在这种情况下创建一个具有两个可选关系的表并确保我不会得到 null/null。
然后我需要将位置表关联到图像表。我将来可能想针对另一个表(即事件)的位置或地址/或地理编码进行查询。
所以一个事件的位置可能与存储在图像表中的位置相同。有人知道这是否是最好的结构。图像表/地址/地理位置,然后是位置和图像表。
换句话说,我有一个表,其中包含两个与地理位置和地址的可选关系。我需要其中一个包含在表中,而不是两者都为空。我怎样才能执行这个约束