sql >> データベース >  >> RDS >> Mysql

結合を回避するための冗長外部キーの保存

    結合は、リレーショナルDBMSが機能する方法です。正規化について学び、使用します。

    これがすべてのサービスに当てはまる場合、データベースには制約があります。 (select service from Service_has_transaction join Transaction_has_wallet)です。 (select service from Service_has_transaction join Transaction_has_wallet join Wallet_has_bonus)

    ほとんどのSQLDBMSでは、その制約を宣言的に表現することはできず、その強制を最適化する方法もわかりません。ただし、SQLイディオムを使用して、それを宣言的に表現および適用できます。 (テーブル定義を推測する:)最初にbonusを追加します Transaction_has_walletへの列 およびTransaction_has_wallet (wallet, bonus)からの外部キー Wallet_has_bonusへ 。次に、ウォレットとボーナスの列をService_has_transactionに追加します およびService_has_transaction (transaction, wallet, bonus)からの外部キー Transactionへ 。これにより冗長な列が追加されますが、外部キーの制約により冗長な値が間違っているのを防ぐため、データベースは有効な状態に制限されます。 (うまくいけば、これはトリガーを介して任意の制約を表現することについて学ぶための動機付けの例です。)




    1. mysql_real_escape_stringの欠点は?

    2. すべてのユーザーと権限とパスワードを使用してMySQLデータベース全体をバックアップするにはどうすればよいですか?

    3. SQL ServerのRAND()の例

    4. JSONをMySQLテーブルに解析する