У меня есть таблица людей. У каждого человека есть имущество, и у многих людей может быть определенная собственность. Так что это отношения "многие ко многим". Это схема:
CREATE TABLE persons (
person_id int(11) NOT NULL AUTO_INCREMENT,
firstname varchar(30) NOT NULL,
lastname varchar(30) NOT NULL,
PRIMARY KEY (person_id)
);
CREATE TABLE properties (
property_id int(11) NOT NULL AUTO_INCREMENT,
property varchar(254) NOT NULL UNIQUE,
PRIMARY KEY (property_id)
);
CREATE TABLE has_property (
person_id int(11) NOT NULL,
property_id int(11) NOT NULL,
PRIMARY KEY (person_id,property_id),
FOREIGN KEY (person_id) REFERENCES persons (person_id),
FOREIGN KEY (property_id) REFERENCES properties (property_id)
);
Теперь скажем, что я хочу вставить в базу данных этого человека:
- Имя: 'Джон'
- фамилия: 'Doe'
- свойства: 'property_A', 'property_B', 'property_C'
человек
+-----------+-----------+----------+
| person_id | firstname | lastname |
+-----------+-----------+----------+
| 1 | John | Doe |
+-----------+-----------+----------+
свойства
+-------------+------------+
| property_id | property |
+-------------+------------+
| 1 | property_A |
| 2 | property_B |
| 3 | property_C |
+-------------+------------+
has_property
+-----------+-------------+
| person_id | property_id |
+-----------+-------------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
+-----------+-------------+
До сих пор я думал, что лучше всего делать обычную вставку в таблице лиц:
INSERT INTO persons (firstname,lastname) VALUES ('John','Doe');
а затем сделайте выбор, чтобы найти идентификатор человека, которого я только что вставил
SELECT person_id FROM persons WHERE firstname='John' AND lastname='Doe';
чтобы вставить в две другие таблицы (потому что мне нужно знать person_id). Но я думаю, что должен быть лучший способ, не так ли?