質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Q&A

解決済

2回答

1374閲覧

【SQL】抽象的なデータ型のテーブル設計について

aoisensi

総合スコア29

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

0グッド

0クリップ

投稿2020/03/01 18:58

SQLで抽象的(abstract)なデータ構造の設計ってどのようにするのがいいでしょうか?

例えば、TwitterのようなSNSを開発しているとします。
このSNSではタイムラインに画像またはテキストを投稿することができます。
このようなデータの型が複数パターンある構造はどのような設計をすればいいんでしょうか?

2つ思いつきましたがどのような構造が正解なのかわかりません。

1:

sql

1CREATE TABLE post(article TEXT, image BLOB);

のようなテーブルを作って片方をnullにする

2:

sql

1CREATE TABLE post(post_type INTEGER, post_id UUID); 2CREATE TABLE article_post(article TEXT); 3CREATE TABLE image_post(image BLOB);

こちらのほうがいい気がするのですがORMを使った場合マッピングできなさそうなのが…

ほかに良いデータ構造があれば教えて下さい

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2020/03/01 23:07 編集

Twitterでは一つの投稿にテキストと画像の両方を含めることができますが、開発中のSNSはどちらか片方だけということでしようか? また、「抽象的(abstract)なデータ構造の設計」と言われると別のものを想像するので、「データベースの論理設計」という言葉の方がいいと思います。
aoisensi

2020/03/01 23:30

どちらか片方だけ: はい、そうです データベースの論理設計: わかりました
guest

回答2

0

このSNSではタイムラインに画像またはテキストを投稿することができます。
このようなデータの型が複数パターンある構造はどのような設計をすればいいんでしょうか?

下記のようなリレーションが存在しないテーブル設計になるという事は、論理設計が十分でないすし、その為には先ず要件をご自身で固める必要があります。

CREATE TABLE post(post_type INTEGER, post_id UUID); CREATE TABLE article_post(article TEXT); CREATE TABLE image_post(image BLOB);

投稿2020/03/02 00:21

sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoisensi

2020/03/02 01:04

SQL初心者なものでこの構造でリレーションを作るにはどうすればいいのかなーと思ったのですが
sazi

2020/03/02 01:25 編集

article ,image は少なくともpost_idとリレーションしていなければなりませんが、それすら含まれていないという事は、DB設計の入り口にも達していないと感じましたので、もっと知見を広めてからでないと意味が無いと思った次第です。
aoisensi

2020/03/02 01:43

省略しただけです 分かりづらくてすいません
sazi

2020/03/02 01:57

(辛口なコメントします) そんな重要なところを省略するという事自体、理解されていないと感じます。
guest

0

自己解決

https://dba.stackexchange.com/questions/36573/how-to-model-inheritance-of-two-tables-mysql
にもあるように2の方法で行きたいと思います

投稿2020/03/02 04:52

aoisensi

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問