Похоже, что ДОМАШНИЕ потребности отдельный идентификатор. И не имеет значения, что такое идентификатор ... пока он уникален.
Рассмотрим следующий пример:
mysql> CREATE TABLE HOME (ID INTEGER NOT NULL auto_increment, ROOM_NUM INTEGER, BUILD_CODE VARCHAR(1), PRIMARY KEY(ID));
Query OK, 0 rows affected (0.14 sec)
mysql> CREATE TABLE PERSON(ID INTEGER NOT NULL auto_increment, NAME VARCHAR(255), HOME_ID INTEGER, PRIMARY KEY(ID), FOREIGN KEY(HOME_ID) REFERENCES HOME(ID));
Query OK, 0 rows affected (0.14 sec)
mysql> INSERT INTO HOME (ROOM_NUM, BUILD_CODE) VALUES (302, "A"), (205, "B");
Query OK, 2 rows affected (0.06 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM HOME;
+----+----------+------------+
| ID | ROOM_NUM | BUILD_CODE |
+----+----------+------------+
| 1 | 302 | A |
| 2 | 205 | B |
+----+----------+------------+
2 rows in set (0.00 sec)
mysql> INSERT INTO PERSON (NAME, HOME_ID) VALUES ("someone", 1);
Query OK, 1 row affected (0.05 sec)
mysql> SELECT * FROM PERSON;
+----+---------+---------+
| ID | NAME | HOME_ID |
+----+---------+---------+
| 1 | someone | 1 |
+----+---------+---------+
1 row in set (0.00 sec)
mysql> SELECT PERSON.NAME, HOME.BUILD_CODE, HOME.ROOM_NUM FROM HOME JOIN PERSON ON PERSON.HOME_ID = HOME.ID;
+---------+------------+----------+
| NAME | BUILD_CODE | ROOM_NUM |
+---------+------------+----------+
| someone | A | 302 |
+---------+------------+----------+
1 row in set (0.00 sec)
Вы видите, что на самом деле не имеет значения, что HOME
имеет ID
значения, которые не говорят много об остальных своих данных ... Вы используете только это поле как инструмент для объединения двух вместе.
Конечно, вы могли бы так же легко иметь INSERT
Эду конкатенация BUILD_CODE
ROOM_NUM
и полей в ID
поле ... Это было бы тоже хорошо. Но имейте в виду, что (a) поиск строк использует больше ресурсов, чем целые поиски, и (б) это всего лишь одна вещь, которую ваше приложение должно поддерживать (например: что произойдет, если вы начнете вычислять номера комнат как A302, но затем, увидев большие номера комнат, вы решаете на A00302? Вам придется пройти через всю таблицу - и все ее ассоциации - и обновить ID
. Это не очень хорошо).
Это было бы идеально для того, что я делаю. Эта база данных предназначена в основном для тестирования части программного обеспечения, которое создает моя команда. Как я могу создать объединенный первичный ключ от BUILD_CODE и ROOM_NUM? – user2967236
Во-первых, вам нужно убедиться, что поле «ID» является «VARCHAR» вместо автоматического инкремента «INTEGER». Затем вы можете просто сделать что-то вроде: «INSERT INTO HOME» (ID, ROOM_NUM, BUILD_CODE) ЗНАЧЕНИЯ (CONCAT («A», 302), 302, «A»); ' –
Есть ли способ автоматически получить идентификатор из ROOM_NUM и BUILD_CODE, или мне просто нужно сделать это вручную для каждого объекта, введенного в таблицу? – user2967236