پروژه پایگاه داده ها – نمودار ER ، طراحی و پیاده سازی برگزاری مسابقات فوتبال
در این پروژه پایگاه داده به تعریف و طراحی نمودار ER فوتبال برای مسابقات لیگ و پیاده سازی آن در MariaDB و لینوکس فدورا می پردازیم.
نمودار ER چیست و چه کاربردی دارد؟
نمودار ER یا ERD مخفف عبارت Entity-Relationship Diagram به معنای نمودار رابطه-موجودیت است. این نمودار یک نمایش تصویری از طبقهبندی گروهها با ویژگیهای مشترک و تعریف رابطه بین این گروهها است.
نمودار ER در درجه اول در زمینههای زیر استفاده میشود:
طراحی پایگاه داده: برای تصویرسازی جداول پایگاه داده و روابط بین آنها استفاده میشود. همچنین در عیبیابی پایگاه داده نیز کاربرد دارد.
مهندسی نرمافزار: به طور معمول در مراحل برنامهریزی یک پروژه نرمافزاری استفاده میشود. برای شناسایی عناصر مختلف سیستم و نحوه تعامل آنها با یکدیگر به کار میرود. علاوه بر این به عنوان نمودار جریان داده (DFD) نیز شناخته میشود.
نمودار ER توسط برخی از نمادها و شکلها مانند بیضی، لوزی، مستطیل و خطوط اتصال تعریف میشود. این نمودارها همراه با نمودارهای جریان داده (DFD) برای نشان دادن جریان اطلاعات در درون فرآیندها یا سیستمها نیز کاربرد دارند.
مدل ER یک مدل دادهای سطح بالا و یک رویکرد گرافیکی برای طراحی پایگاه داده است که عناصر داده و رابطه بین آنها در یک سیستم یا نرمافزار مشخص را تعریف میکند. این نمودارها به ما کمک میکنند تا ارتباط بین موجودیتها، اشیا یا مفاهیم مختلف در یک سیستم را بهتر درک کنیم.
نمودار ER به عنوان یک راه حل برای مشکل عدم وجود یک روش استاندارد برای مدلسازی پایگاه داده یا فرآیندهای تجاری به وجود آمد. در واقع نوعی نمودار فلوچارت است که به درک ارتباط بین موجودیتها، اشیا یا مفاهیم مختلف در یک سیستم کمک میکن.
بخش اول پروژه، نمودار ER :
برخی از فرضیات در نظر گرفته شده :
- هر تیم فوتبال تعدادی بازیکن (player ) دارد
- هر تیم فوتبال تعداد عضو فنی و خدماتی دارد مثل مربی، سرپرست ، تدارکات
- هر عضو فنی میتواند تنها عضو یک تیم در تاریخ مشخص باشد.
- هر بازیکن تنها در یک تیم عضو هست البته در یک بازه تاریخی مشخص.
- دوار میتواند 4 جایگاه (position)در بازی داشته باشد:به عنوان داور اول،داور دوم و…
بخش دوم طراحی :
بخش سوم پروژه ، پیاده سازی :
پیاده سازی در لینوکس Fedora نسخه 36 با mariadb 10.5 انجام شده است.
1 – نصب mariadb در fedora :
$ sudo dnf install mariadb
$ sudo dnf install mariadb-server
2 – اجرای فایل ( دستورات ) sql که پیوست شده است:
1- تغییر دایرکتوری موجود به پوشه فایل های نوشته شده :
2- ورود به محیط mariadb با یوزر root
3- اجرای فایل football_installation.sql : این فایل دیتا بیس و جدول های مورد نیاز را می سازد.
4– اجرای فایل football_simpledata.sql : در این فایل جدول ها با دیتا های نمونه پر شده اند.( دستورات insert )
5- اجرای چند کوئری نمونه و کاربردی که در فایل football_simplequery.sql نوشته شده اند :
لیست کل تیم ها :
select * from TEAM ;
لیست بازیکنان تیم استقلال:
select * from PLAYER where t_name="Esteghlal";
لیست بازی های تیم پرسپولیس:
select * from GAME where t1_name='Perspolis' or t2_name='Perspolis';
بازی تیم پرسپولیس و تراکتور :
select * from GAME where (t1_name='Perspolis' or t2_name='Perspolis') and (t1_name='Teraktor' or t2_name='Teraktor');
لیست بازیکنان استقلالی که در بازی با فولاد بازی کرده اند :
select p.first_name,p.last_name,p.p_num,pl.* from PLAYER as p join Play as pl join GAME as g where pl.game_id=g.game_id AND g.t1_name='Esteghlal' AND g.t2_name='Foolad' and pl.p_id_card=p.id_card and p.t_name='Esteghlal';
لیست و تعداد کارت زرد هایی که بازیکنان در این مسابقات گرفته اند:
select p.id_card,p.first_name,p.last_name,SUM(pl.yellow_card) as ' Number of yellow cards' from PLAYER as p join Play as pl where pl.p_id_card=p.id_card AND pl.yellow_card > 0 group by p.id_card;
لیست داوران بازی استقلال و پرسپولیس :
select r.*,j.position from REFEREE as r join Judges as j join GAME as g where g.t1_name='Esteghlal' and t2_name='Perspolis' and j.game_id=g.game_id and r.ref_id=j.ref_id;
جدول مسابقات و امتیاز هر تیم :
WITH RESULT AS (
SELECT *,
CASE WHEN t1_goals > t2_goals THEN 3
WHEN t1_goals = t2_goals THEN 1
WHEN t1_goals < t2_goals THEN 0
END AS t1_points,
CASE WHEN t2_goals > t1_goals THEN 3
WHEN t2_goals = t1_goals THEN 1
WHEN t2_goals < t1_goals THEN 0
END AS t2_points
FROM GAME
)
SELECT
t_name,
SUM(num_points) AS num_points
FROM (
SELECT
t1_name AS t_name,
SUM(t1_points) AS num_points
FROM RESULT
GROUP BY 1
UNION ALL
SELECT
t2_name AS t_name,
SUM(t2_points) AS num_points
FROM RESULT
GROUP BY 1
) x
GROUP BY 1
ORDER BY num_points DESC;
دانلود فایل ها:
در فایل زیپ زیر فایل های sql که در بالا از آن یاد شد قرار دارد.
دیدگاهتان را بنویسید