0

プログラミングとデータベース全般に不慣れです。これまでに DUmmies 第 4 版の PHP.MYSQL を読み、お店のメニュー/在庫を格納する独自のデータベースを作成しようとしています。現在、XAMPP/MYSQL を使用しています。

私のデータベースのサンプルテーブルは次のとおりです。

SHOPINFO

Shopname    Outlet          Category    Subcategory       Item
PizzaHut    Main            Drinks      Carbonated        Cola
PizzaHut    Main            Drinks      Non-carbonated    Orange Juice
BurgerKing  Central London  Burgers     Beef              Whopper
BurgerKing  South London    Burgers     Beef              Whopper Jr.
BurgerKing  South London    Drinks      Carbonated        Cola

上記の表を次のように分割する必要があるかどうか、現在疑問に思っています。

SHOPINFO
Shopname    Outlet           Category    Subcategory    Item
PizzaHut    Main             1           1              1
PizzaHut    Main             1           2              3
BurgerKing  Central London   1           5              4
BurgerKing  South London     1           5              7
BurgerKing  South London     3           3              2

カテゴリ、サブカテゴリ、およびアイテムはすべて異なるテーブルに分割され、それぞれのカテゴリ ID、サブカテゴリ ID、およびアイテム ID によって識別されます。

この決定に関して私が持っている2つの主要な質問は次のとおりです。

1.テーブルを分割することは本当に有益でしょうか? 2番目のテーブルよりも最初のテーブルをクエリする方がはるかに簡単ではないので、これを尋ねていますか? たとえば、私は単に次のようなことをすることができます

$query="SELECT * FROM SHOPINFO WHERE Shopname='BurgerKing' AND 
Outlet='South London' AND Category='Drinks' AND 
Subcategory='Carbonated'";
$result=mysqli_query($cxn,$query) or die("Error");
while($row=mysqli_fetch_assoc)
{
extract($row);
echo "$Item";
}

テーブルが分割された場合に実行する必要があるクエリの代わりに(どうすればよいかわからず、心が痛む)。

2.テーブルを分割する場合、Shopname と Outlet を主キーとして使用して、カテゴリ、サブカテゴリ、アイテムのショップごとに個別のテーブルを作成する必要があると思います。おそらく ON DELETE CASCADE と ON UPDATE CASCADE を使用して、外部キーを持つ SHOPINFO テーブル。主な問題は、クエリをより複雑にすることを除けば、これを行うと正確にどのような利点があるかということです。

PS: 私の懸念は、将来のスケーラビリティに関するものです (例: 将来、国、都市、州をアウトレットに追加するなど)。

アドバイス、ヘルプ、意見、侮辱、炎上は大歓迎です。

ありがとう!

4

1 に答える 1

1

あなたの構造全体が間違っていると思います。会社のテーブルから始めて、すべてを個別のテーブルに分割する必要があります。表示されたエントリはピザハットとバーガーキングだけです。次に、会社への外部キーと、支店番号、住所などの各支店に関するアトミックデータを含む支店のテーブルが必要です。次に、データが飲み物またはハンバーガーのいずれかであると思われるカテゴリテーブルが必要です。カテゴリへの外部キーを含むサブカテゴリ テーブル (炭酸、非炭酸、牛肉、鶏肉など) によって。サブカテゴリへの外部キーを持つ製品テーブル (コーラ、オレンジ ジュース、ワッパー、ワッパー jnr) が必要です。最後に、2 つのフィールド (支店番号、製品番号) を持つ支店製品結合テーブルがあります。

この構造は一見煩雑に見えますが、最も柔軟性が高く、あらゆる種類のクエリ (会社別の総売上高、支店別の総売上高など) を簡単に作成できます。これは、データベースを定義するときに明確ではないかもしれませんが、将来、予期していなかったデータ集計を求められた場合に、これを評価してください。

すべてを 1 つのテーブルに保持するのは非常に悪い考えです。たとえば、バーガー キングが The Grill Master (発明された名前) に引き継がれたとしましょう。この方法では、変更を反映するために 1 つのレコードを変更するだけで済みますが、1 つの巨大なテーブルを使用する場合は、多くのレコードを更新する必要があります。

「巨大な 1 つのテーブル」アプローチは、Excel をデータベース マネージャーとして使用し、基本的にこれ以上複雑なことを経験していない人々から来ています。専門的な答えは、すべてをテーブルに分割したリレーショナル データベースを使用することです。

上記が見下すように思われる場合はお詫び申し上げます。私はリレーショナル データベースを使用する企業内での Excel の使用を検討している博士課程の候補者であるため、私の見解はやや偏っています。

于 2013-05-25T14:43:21.170 に答える