1

我有一个Person具有以下属性的表:

在此处输入图像描述

我想实现一个名为的表,该表Car将保存有关Person驱动的汽车的信息。我想以一种方式实现它,如果多个用户驾驶“Toyota Corolla”,那么“Toyota Corolla”应该只作为字符串存储一次。另外,我假设不是每个人都只拥有一辆车,这也是公平的。条目将定期记录,但不同的Car记录可能仅达到 5000 条。到目前为止,我已经完成了以下操作,但是如果多个用户拥有同一辆车,我该如何实现一个让我保存一次的属性。ModelNames

车

CREATE  TABLE `Car` (
`idCar` MEDIUMINT UNSIGNED  AUTO_INCREMENT ,
`ModelName` varchar(80),
`idPerson` INT NOT NULL,
PRIMARY KEY (`idCar`) ,
FOREIGN KEY (`idPerson`)    REFERENCES `Person` (`idPerson`) 
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE=InnoDB;

UPDATE Car, Person
Set Car.idPerson = Person.idPerson
WHERE Car.idPerson = Person.idPerson;

INSERT INTO Car VALUES (1, 'Toyota Corolla', 1);
INSERT INTO Car VALUES (2, 'Mazda 6', 1);
INSERT INTO Car VALUES (3, 'Toyota Corolla', 2);
INSERT INTO Car VALUES (4, 'Pulsar GTI', 3);


SELECT DISTINCT Car.idCar ,Car.ModelName,  Person.FullName,  Person.idPerson
FROM Person, Car
WHERE Car.idPerson = Person.idPerson
Order by Car.idCar;
4

1 回答 1

2

我认为您需要查看多对多关系设计。

让我们说

Person
- PersonID -> Primary Key
- Surname
- FirstName
- Title
- etc

Car
- CarID -> Primary Key
- CarType
- CarMake
- YearModel
- etc

PersonCars
- PersonID -> Foreign Key to Person.PersonID
- CarID = > Foreign Key to Car.CarID

这将允许您定义汽车定义一次,并多次链接它。

然后您可以选择如下

SELECT  *
FROM    Person p INNER JOIN
        PersonCars pc   ON  p.PersonID = pc.PersonID INNER JOIN
        Car c   ON  pc.CarID = c.CarID
于 2013-08-15T04:01:57.337 回答