タグ付けされた質問 「foreign-keys」

外部キーは、リレーショナル(およびSQL)データベースのデータ整合性機能です。外部キーは、参照整合性制約の対象となるリレーショナルテーブル内の一連の属性です。参照整合性制約では、1つのテーブルAの外部キー属性の値が、指定されたいくつかのテーブルB(Aと同じテーブルになる場合があります)の対応する値と一致する必要があります。

15
いつ/なぜSQL Serverでカスケードを使用するのですか?
SQL Serverで外部キーを設定する場合、どのような状況で削除または更新時にカスケードする必要がありますか?その背後にある理由は何ですか? これはおそらく他のデータベースにも当てはまります。 私は、各シナリオの具体的な例として、できればそれらをうまく使用した人からの検索をしています。

6
外部キー制約をバイパスしてMySQLを強制的に削除する
1つを除いてデータベースからすべてのテーブルを削除しようとすると、次のエラーが発生します。 親行を削除または更新できません:外部キー制約が失敗します もちろん、試行錯誤してそれらの主要な制約を確認し、最終的にすべてのテーブルを削除することもできますが、すべてのテーブルを強制的に削除する高速な方法があるかどうかを知りたいです(これらを再挿入できるため、削除したくない)。 グーグルは私に次の方法を提案するいくつかのサイトを狙った: mysql> SET foreign_key_checks = 0; mysql> drop table ... mysql> SET foreign_key_checks = 1; 簡単に言えば、いくつかのテーブルを削除できたときに同じエラーが発生するため、実際にはうまくいきませんでした。すべての外部キーを特定のテーブルにリンクする方法をスタックオーバーフローで確認しましたが、すべてをスクリプト化しない限り、時間がかかりすぎます(他のオプションがない場合に実行可能です)。 データベースが4.1なので使用できません DROP DATABASE アイデア?

2
Ruby on Rails。:belongs to関係でActive Record .buildメソッドを使用するにはどうすればよいですか?
Railsで.buildメソッドに関するドキュメントを見つけることができませんでした(現在2.0.2を使用しています)。 実験により、has_manyいずれかのレコードが保存される前に、buildメソッドを使用して関係にレコードを追加できるようです。 例えば: class Dog < ActiveRecord::Base has_many :tags belongs_to :person end class Person < ActiveRecord::Base has_many :dogs end # rails c d = Dog.new d.tags.build(:number => "123456") d.save # => true これにより、外部キーを持つ犬とタグの両方が適切に保存されます。これはbelongs_to関係で機能していないようです。 d = Dog.new d.person.build # => nil object on nil.build 私も試しました d = Dog.new d.person = Person.new …

8
既存のSQLiteテーブルに外部キーを追加するにはどうすればよいですか?
次の表があります。 CREATE TABLE child( id INTEGER PRIMARY KEY, parent_id INTEGER, description TEXT); 外部キー制約を追加するにはどうすればよいparent_idですか?外部キーが有効になっていると仮定します。 ほとんどの例では、テーブルを作成していると想定しています。既存の制約に制約を追加したいと思います。
128 sql  sqlite  foreign-keys  ddl 

1
postgresql外部キー構文
以下のposgresqlコードでわかるように、2つのテーブルがあります。最初のテーブルの学生には2つの列があります。1つはStudent_nameで、もう1つは主キーであるStudent_idです。テストと呼ばれる2番目のテーブルには、4つの列があります。1つはsubject_id、1つはsubject_name、次に1つは、被験者の中で最も高いスコアが最も高い、Student_idの生徒用です。私の生徒のテーブルで、highestStudent_idがStudent_idを参照するようにしています これは私が以下に持っているコードです、構文が正しいかどうかわかりません: CREATE TABLE students ( student_id SERIAL PRIMARY KEY, player_name TEXT); CREATE TABLE tests ( subject_id SERIAL, subject_name, highestStudent_id SERIAL REFERENCES students); 構文はhighestStudent_id SERIAL REFERENCES students正しいですか?私は別のようなものを見たのでhighestStudent_id REFERENCES students(student_id)) postgresqlで外部キーを作成する正しい方法は何ですか?

24
データベース設計で外部キーは本当に必要ですか?
私の知る限り、外部キー(FK)は、プログラマーがデータを正しい方法で操作するのを支援するために使用されます。プログラマが既にこれを正しい方法で行っているとしたら、外部キーの概念が本当に必要なのでしょうか。 外部キーの他の用途はありますか?ここで何か不足していますか?

2
Django:整数を使用して外部キーを設定しますか?
モデルの整数IDを使用して外部キー関係を設定する方法はありますか?これは最適化を目的としています。 たとえば、従業員モデルがあるとします。 class Employee(models.Model): first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) type = models.ForeignKey('EmployeeType') そして EmployeeType(models.Model): type = models.CharField(max_length=100) 従業員のタイプを無制限にできる柔軟性が欲しいのですが、デプロイされたアプリケーションにはタイプが1つしかない可能性が高いので、IDをハードコードして関係をこのように設定する方法があるかどうか疑問に思っています。これにより、最初にEmployeeTypeオブジェクトを取得するdb呼び出しを回避できます。

13
エラーコード:1005。テーブル '…'を作成できません(エラー番号:150)
私はインターネットでこの問題の解決策を探し、スタックオーバーフローの質問を確認しましたが、私の解決策はどれもうまくいきませんでした。 テーブルsira_noからmetal_kodへの外部キーを作成します。 ALTER TABLE sira_no ADD CONSTRAINT METAL_KODU FOREIGN KEY(METAL_KODU) REFERENCES metal_kod(METAL_KODU) ON DELETE SET NULL ON UPDATE SET NULL ; このスクリプトは次を返します: Error Code: 1005. Can't create table 'ebs.#sql-f48_1a3' (errno: 150) 参照されているテーブルにインデックスを追加してみました: CREATE INDEX METAL_KODU_INDEX ON metal_kod (METAL_KODU); 両方のテーブル(charsetとcollat​​ion)でMETAL_KODUをチェックしましたが、この問題の解決策が見つかりませんでした。この問題を解決するにはどうすればよいですか? これがmetal_kodテーブルです。 METAL_KODU varchar(4) NO PRI DURUM bit(1) NO METAL_ISMI varchar(30) NO …


8
外部キーを主キーとして使用しても問題ありませんか?
2つのテーブルがあります。 ユーザー(ユーザー名、パスワード) プロフィール(profileId、gender、dateofbirth、...) 現在、私はこのアプローチを使用しています。各プロファイルレコードには、Userテーブルにリンクする外部キーとして「userId」という名前のフィールドがあります。ユーザーが登録すると、プロファイルレコードが自動的に作成されます。 私は私の友人の提案と混同しています:として「はuserId」フィールドを持っている外国人と主キーと「プロファイルID」フィールドを削除します。どちらのアプローチが優れていますか?

20
MySQLがerrnoを与える外部キーを持つテーブルを作成する:150
他の2つのテーブルの主キーを参照する2つの外部キーを持つMySQLでテーブルを作成しようとしていますが、errno:150エラーが発生し、テーブルが作成されません。 3つのテーブルすべてのSQLは次のとおりです。 CREATE TABLE role_groups ( `role_group_id` int(11) NOT NULL `AUTO_INCREMENT`, `name` varchar(20), `description` varchar(200), PRIMARY KEY (`role_group_id`) ) ENGINE=InnoDB; CREATE TABLE IF NOT EXISTS `roles` ( `role_id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50), `description` varchar(200), PRIMARY KEY (`role_id`) ) ENGINE=InnoDB; create table role_map ( `role_map_id` int not null `auto_increment`, …

8
MySQLで関係を作成する方法
クラスでは、私たちはすべて「勉強中」のデータベースであり、誰もがAccessを使用しています。これに退屈して、クラスの残りの部分で行っていることを実行しようとしていますが、Accessを使用する代わりにMySQLで生のSQLコマンドを使用しています。 データベースとテーブルを作成できましたが、2つのテーブル間の関係を作成するにはどうすればよいですか? 次のような2つのテーブルがある場合: CREATE TABLE accounts( account_id INT NOT NULL AUTO_INCREMENT, customer_id INT( 4 ) NOT NULL , account_type ENUM( 'savings', 'credit' ) NOT NULL, balance FLOAT( 9 ) NOT NULL, PRIMARY KEY ( account_id ) ) そして CREATE TABLE customers( customer_id INT NOT NULL AUTO_INCREMENT, name VARCHAR(20) NOT NULL, …


5
SqlAlchemy-関係属性によるフィルタリング
SQLAlchemyの経験があまりなく、解決できない問題があります。私は検索を試み、多くのコードを試しました。これは私のクラスです(最も重要なコードに削減されています): class Patient(Base): __tablename__ = 'patients' id = Column(Integer, primary_key=True, nullable=False) mother_id = Column(Integer, ForeignKey('patients.id'), index=True) mother = relationship('Patient', primaryjoin='Patient.id==Patient.mother_id', remote_side='Patient.id', uselist=False) phenoscore = Column(Float) そして、私はすべての患者を照会したいと思います。 == 10 言われたように、私はたくさんのコードを試しましたが、私はそれを取得しません。私の目には、論理的な解決策は patients = Patient.query.filter(Patient.mother.phenoscore == 10) .mother.phenoscore出力時に各要素にアクセスできますが、このコードではアクセスできないためです。 (SQLステートメントや追加の結合ステートメントを記述せずに)リレーションシップの属性でフィルタリングする(直接)可能性はありますか?この種類のフィルターは複数回必要です。 簡単な解決策がなくても、私はすべての答えを得られてうれしいです。


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