DBを設計する経験はあまりありません。私には理論的な知識がありますが。批判的な私のDBデザイン
だから、私の問題に。私たちは、たくさんのExcelファイル(yah、驚き!)のデータを持っており、それらをDBに移動したいと考えています。
簡略化するため、システムが集中型アラームシステムであるとしましょう。データは遠隔地から集められ、集中監視室に表示されます。 各ロケーションには一意の名前と複数のデバイスがあります。ある場所内では、デバイス名は一意であり、デバイスには複数のアラームがあります。デバイス内では、アラーム名は一意です。
各場所には、その場所のアラームを集約して送信する1つ以上のターミナルユニット(TU)があります。それぞれのTUには一枚のカードがあり、それぞれにTUごとに一意のIDが付いています。各カードには、カードごとに一意のアドレスを持つ各アラームの配線終端接点があります。
これらのエンティティのいずれも、名前を変更/再描画することができます。
ご覧のとおり、データは高度に階層的です。そして、私は各配線コンタクトのアラームの割り当て(関係)の履歴を保存する必要があります。アラームは、1つの連絡先から別の連絡先への割り当てを変更することができます。
Location TU
| |
+- Device +- Card
| |
+-- Alarm +--Contact
| |
+----Alarm-Contact----+
マイデザイン: 私は、上記の各エンティティのテーブルを作成しました。私は、自動インクリメント整数としてそれらのすべてに人工主キーを使用しました。階層構造のテーブル(Tn)は、コンポジション(Tn.name、Tn-1.pk、Tn-2.pk、...)の一意性制約を持ちます。ここで、Tnはテーブルの深さ(n)です。階層と(pk)はテーブルの主キーです。
私はSQL Serverを使用していますが、私は自動インクリメント整数PKに疑問を抱いています。私が10のレコードを持っていて、最後のレコード(10番目)以外のレコードをすべて削除したとしましょう。次の追加レコードは11に番号付けされますか、またはDBMSはそれらを10 - > 1、新しい - > 2に番号付けし直しますか?前者が正しい場合、PKオーバーフローの問題を解決する方法。
もう1つの質問は、これに関する履歴データをどのようにモデル化するかです。私は、Alarm-Contactテーブルへのn-1の関係を持つAlarm-Contact-Historyテーブルを作成する必要があると考えています。
おかげ