タグ付けされた質問 「database-design」

概念スキーマおよび/または論理モデルおよび/またはデータベースの物理設定の開発。



6
常に単一の整数列を主キーとして持つことの欠点は何ですか?
私が取り組んでいる1つのWebアプリケーション内で、すべてのデータベース操作は、Entity Framework ORMで定義されたいくつかの汎用リポジトリを使用して抽象化されています。 ただし、汎用リポジトリのシンプルなデザインを実現するには、関連するすべてのテーブルで一意の整数(Int32C#、intSQL)を定義する必要があります。これまで、これは常にテーブルのPKであり、IDENTITY。 外部キーは頻繁に使用され、これらの整数列を参照します。これらは、一貫性とORMによるナビゲーションプロパティの生成の両方に必要です。 通常、アプリケーション層は次の操作を実行します。 テーブルからの初期データロード(*)-SELECT * FROM table 更新 -UPDATE table SET Col1 = Val1 WHERE Id = IdVal 削除 -DELETE FROM table WHERE Id = IdVal 挿入 -INSERT INTO table (cols) VALUES (...) 頻度の低い操作: 一括挿入 - BULK INSERT ... into tableその後に(*)すべてのデータロード(生成された識別子を取得するため) 一括削除 -これは通常の削除操作ですが、ORMの観点からは「一括」です。DELETE FROM table where OtherThanIdCol …

6
DateTimeを保存する好ましい方法
日付と時刻の情報は、いくつかの方法で保存できます。DateTime情報を保存するための最良の方法は何ですか? DateTimeを使用して2つの別々の列または1つの列に日付と時刻を保存しますか? そのアプローチが優れている理由を説明できますか? (参照用のMySQLドキュメントへのリンク。質問は一般的であり、MySQLに固有ではありません) 日付と時刻のタイプ:日付と時刻

8
主キーの値が変わるのはなぜですか?
私は最近ROWGUIDの概念を研究しており、この質問に出くわしました。 この答えは洞察を与えましたが、主キーの値を変更するという言及で、私を別のウサギの穴に導きました。 私の理解では、主キーは不変である必要があり、この回答を読んだ結果、ベストプラクティスと同じものを反映した回答しか得られなかったため、検索を続けてきました。 レコードが作成された後に主キー値を変更する必要があるのはどのような状況ですか?


2
同じログインを使用して3番目のデータベースを経由して2つのデータベースを接続する方が安全ですか?
次のセットアップがあります。 デスクトップソフトウェアで使用されるプライベートデータを含む複数の運用データベース プライベートデータベースのデータを必要とするパブリックWebサイトのWebデータベース プライベートデータベースからデータを取得するいくつかのビューとストアドプロシージャを含む中間データベース 現在、WebサイトはWebデータベースにログインし、Webデータベースは中間データベースに接続して、運用データベースでデータを取得したり、ストアドプロシージャを実行したりします。すべてのデータベースは同じSQLインスタンス上にあり、プロセス全体が同じユーザーアカウントを使用します。 ユーザーアカウントには、Webデータベースと中間データベースへのフルアクセスがありますが、プライベートデータベースの特定のビューとストアドプロシージャにのみアクセスできます。 これは、パブリックデータベースをプライベートデータベースに直接接続するよりも本当に安全ですか? 同じログインがすべてのデータベースのデータにアクセスするために使用され、プライベートデータベースで必要なビュー/ SPのみに既に制限されているため、中間データベースは物事を複雑にするためだけにあるようです。削除したいと思っています。

2
NEWSEQUENTIALID()を列のデフォルト値として使用できないのはなぜですか?
Management Studioでテーブルを作成しようとしていますが、新しい(SQL 2005以降の)NEWSEQUENTIALID()関数について読んだ後、試してみたいと思いました。 これは私がやっていることです: しかし、それは私をさせません。私が得るエラーメッセージは次のとおりです。 'FormTemplate (Forms)' table - Error validating the default for column 'FormTemplateId'. ここにトリックがありませんか?私は間違いなくSQL Server 2008 R2を実行しています。

7
多数の列を格納する良い方法は何ですか?
データベースにこのデータを保存する方法を決めるのに問題があります。それを行う最善の方法に関する提案はありますか?私はデータベースについて多くのことを知りません、私は付け加えるかもしれません。 データはそのようにフォーマットされていますが、列の数は4ではなく約240であるため、各日付には240の一意の値が関連付けられています。 Date/Time 200,00 202,50 205,00 2010.11.12 13:34:00 45,8214 43,8512 41,5369 2010.11.12 13:35:00 461,9364 454,2612 435,5222 また、行はDataSiteに関連付けられています。 最初に考えたのは、DataID(pk)、DataSiteID、ParameterID、Date、Valueのようなテーブルを作成し、DataSite、Parameter、Dateのインデックスを作成することでした。ParameterIDは、入力列ヘッダー(200,00 202,50 205,00 ...)を格納する別のテーブルを参照します。 私の第2の考えは、240奇数列すべてのテーブルを作成することでした。私は他にもいくつかの方法を考え出しましたが、それらもかなり不満足です。 私が最初の解決策で抱えている問題(それほど大きな問題ではありませんが、好きではありません)は、DateとDataSiteIDがその入力行の240個の値すべてに対して繰り返されるため、かなり多くの余分なスペース。 (上記のテキスト形式で)年間約40GBのデータが入り、データはDataSite、Parameter、Dateで検索されます。入ってくるデータの量は、おそらく1年程度で4倍になります。 良いアイデアはありますか?ありがとう、ジェームス 編集:これは時系列データであり、列は異なる波長での測定値です。データは比較的狭い波長範囲で分析する必要があります。将来のある時点で追加の波長が追加される可能性もあります。 編集:回答者のおかげで、私はそれを本当に感謝します:)私はおそらく500gb程度のテストデータでいくつかの実験を実行する時間を見つけることができると思います。結論を投稿します;)

2
デフォルトの制約、それだけの価値はありますか?
私は通常、次のルールに従ってデータベースを設計します。 db_ownerとsysadmin以外は誰もデータベーステーブルにアクセスできません。 ユーザーの役割はアプリケーション層で制御されます。通常、1つのdbロールを使用して、ビュー、ストアドプロシージャ、および関数へのアクセスを許可しますが、場合によっては、一部のストアドプロシージャを保護するための2番目のルールを追加します。 TRIGGERSを使用して、重要な情報を最初に検証します。 CREATE TRIGGER <TriggerName> ON <MyTable> [BEFORE | AFTER] INSERT AS IF EXISTS (SELECT 1 FROM inserted WHERE Field1 <> <some_initial_value> OR Field2 <> <other_initial_value>) BEGIN UPDATE MyTable SET Field1 = <some_initial_value>, Field2 = <other_initial_value> ... END DMLは、ストアドプロシージャを使用して実行されます。 sp_MyTable_Insert(@Field1, @Field2, @Field3, ...); sp_MyTable_Delete(@Key1, @Key2, ...); sp_MyTable_Update(@Key1, @Key2, …

4
単一の列から複数のテーブルを参照するのに最適な設計ですか?
提案されたスキーマ 何よりもまず、投稿全体を通じて参照するために提案されたスキーマの例を次に示します。 Clothes ---------- ClothesID (PK) INT NOT NULL Name VARCHAR(50) NOT NULL Color VARCHAR(50) NOT NULL Price DECIMAL(5,2) NOT NULL BrandID INT NOT NULL ... Brand_1 -------- ClothesID (FK/PK) int NOT NULL ViewingUrl VARCHAR(50) NOT NULL SomeOtherBrand1SpecificAttr VARCHAR(50) NOT NULL Brand_2 -------- ClothesID (FK/PK) int NOT NULL PhotoUrl VARCHAR(50) …

4
データベース設計:「アーカイブ」問題の処理方法
多くのアプリケーション、重要なアプリケーション、銀行などがこれを日常的に行っていると確信しています。 すべての背後にある考え方は次のとおりです。 すべての行に履歴が必要です すべてのリンクは一貫性を保つ必要があります 「現在の」列を取得する要求を簡単に行う必要があります 陳腐化したものを購入したクライアントは、この製品がカタログの一部ではなくなっても、購入したものを見る必要があります。 等々。 これが私がやりたいことであり、私が直面している問題を説明します。 すべてのテーブルにこれらの列があります。 id id_origin date of creation start date of validity start end of validity また、CRUD操作のアイデアは次のとおりです。 create = id_origin= id、date of creation= now、start date of validity= now、end date of validity= nullで新しい行を挿入します(=は現在のアクティブなレコードであることを意味します) 更新= read = = end date of validitynullですべてのレコードを読み取ります 「現在の」レコードend date of validity= …

2
3500万行以上のテーブルに対応する効果的なmysqlテーブル/インデックスデザイン、200以上の対応する列(ダブル)、任意の組み合わせをクエリ可能
次の状況でのテーブル/インデックスの設計に関するアドバイスを探しています。 複合主キー(assetid(int)、date(date))を含む大きなテーブル(株価履歴データ、InnoDB、3500万行および成長)があります。価格情報に加えて、各レコードに対応する必要がある200のdouble値があります。 CREATE TABLE `mytable` ( `assetid` int(11) NOT NULL, `date` date NOT NULL, `close` double NOT NULL, `f1` double DEFAULT NULL, `f2` double DEFAULT NULL, `f3` double DEFAULT NULL, `f4` double DEFAULT NULL, ... skip a few … `f200` double DEFAULT NULL, PRIMARY KEY (`assetid`, `date`)) ENGINE=`InnoDB` DEFAULT CHARACTER …

4
SQL大規模テーブルの設計
SQL Server 2008のテーブル設計に関する一般的な質問があります。現在、600 GBを超えるテーブルがあり、1日に約3 GBで成長しています。このテーブルには適切な指標がありますが、クエリを実行するときやそのサイズのために、大きなハングアップになりつつあります。問題は、年と月でテーブルを複数のテーブルに分割するか(これにより、他の部門が大規模なデータセットを分割する方法に適合します)、またはSQL Serverに組み込まれたパーティションを活用する必要があります。パーティショニングを使用すると、コードの変更が少なくて済むようです。パーティション分割時に読んだものから、まだ1つのテーブルを照会するだけで、サーバーはデータの取得方法を処理します。複数のテーブルルートを使用する場合、複数のテーブルからデータをプルする必要があります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.