2017-11-20 26 views
0

私は現在、特定の時間帯の値を記録するデータベースを設計中です。説明のために、私はプライマリキーとして次の列を持つテーブルを持っているとしましょう:SQL - 異なる時点で異なる値を持つテーブル - ベストプラクティス?

名前| someInteger | anotherInteger

たとえば、同じプライマリキーに対して異なる値の値を30秒間ログに記録したいとします。たとえば、「名前」、「SomeInteger」、「AnotherInteger」の「タイムスタンプ」だけが他のレコードと異なることが保証されている複数のレコードが存在する可能性があります。

"ExampleName" | 1 | 3 |タイムスタンプ1 |値1
"ExampleName" | 1 | 3 |タイムスタンプ2 |値2
"ExampleName" | 1 | 3 |タイムスタンプ3 | Value3 ...

つまり、私は主キーの一部としてタイムスタンプ列を含めることになります。私は現在、これを行うための最良のデータベース設計(またはベストプラクティス)が何であるか疑問に思っていますか?私はちょうどプライマリキーの一部としてタイムスタンプの列を含めるか、よりよい解決策がありますか?

は事前にありがとうございました。 インゴ

答えて

0

のように同じ主キーの複数のレコードがあるかもしれません:あなたはかなり混乱しているようだ

。主キーは定義上一意です。あなたのテーブルは問題ありませんが、プライマリキー(説明のとおり)は複合プライマリキーです。

2つのテーブルが必要なようです。 1つはエンティティです。

create table entity (
    EntityId int auto_increment primary key, 
    Name varchar(255) not null, 
    someInteger int not null, 
    anotherInteger int not null, 
    unique (name, someInteger, anotherInteger) 
); 

create table entityValues (
    entityValueId int auto_increment primary key, 
    EntityId int, 
    timestamp datetime, 
    value ?, -- I don't know what the type is 
    foreign key (EntityId) references entities(EntityId) 
); 

これはMySQL構文を使用しています。 SQLiteでも同じことができます。

+0

はい、あなたは正しいです。私は何とか、タイムスタンプをプライマリキーの一部として含めることを忘れてしまったので、プライマリキーを再びユニークにしました。私は質問を編集します。 – IngoPlatzberg

関連する問題