次のような 3 つのテーブルがあります。
People:
+------------+-------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| fname | varchar(32) | NO | | NULL | |
| lname | varchar(32) | NO | | NULL | |
| dob | date | NO | | 0000-00-00 | |
| license_no | varchar(24) | NO | | NULL | |
| date_added | timestamp | NO | | CURRENT_TIMESTAMP | |
| status | varchar(8) | NO | | Allow | |
+------------+-------------+------+-----+-------------------+----------------+
Units:
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| number | varchar(3) | NO | | NULL | |
| resident | int(11) | NO | MUL | NULL | |
| type | varchar(16) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
Visits:
+----------+-----------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-----------+------+-----+---------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| vis_id | int(11) | NO | MUL | NULL | |
| unit | int(11) | NO | MUL | NULL | |
| time_in | timestamp | NO | | CURRENT_TIMESTAMP | |
| time_out | timestamp | NO | | 0000-00-00 00:00:00 | |
+----------+-----------+------+-----+---------------------+----------------+
これらのテーブルをリンクする複数の外部キーがあります。
units.resident -> people.id
visits.unit -> units.id
visits.vis_id -> people.id
基本的に、私は自分のデザインを簡素化し、「居住者」と「訪問者」をテーブルにまとめようとしましたが、今はそれらをクエリで「リンク」するのに問題があります...これが私がなりたいものですクエリから戻ることができます:
concat(p.lname, ', ', p.fname)
u.number
concat(p.lname, ', ', p.fname)
time_in
time_out
名前の最初のセットは居住者からのものである必要があります。居住者は の外部キーによって参照されているため、居住者であることがわかっていますunits
。はそのu.number
居住者のユニット番号を返し、名前の 2 番目のセットは現在の訪問者 (まだチェックアウトしていない0000-00-00
人で、タイムスタンプによって決定されます... チェックアウトした場合、そうではないため、そうで0000-00-00
はありません)表示されます)。
これは、私のような初心者が自分で理解するには難しすぎるか、DB 設計に欠陥があるのではないかと考え始めています...すべての居住者と訪問者を同じテーブルに入れたかった理由は、インデックスを使用してそれらすべてを検索できるようにしたいと考えています。fulltext
提案があれば、私はこれについて何日も壁に頭をぶつけてきたので、私はすべて耳を傾けています...