Skip to content

Commit

Permalink
Merge pull request #6 from dan-knight/unique
Browse files Browse the repository at this point in the history
Database unique constraints and indexes
  • Loading branch information
dan-knight authored Dec 19, 2023
2 parents 7d280b0 + a730db6 commit 1729b25
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 4 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- CI/CD action with Python testing, linting, and import checking
- Database schemas for data provided by the NFL
- Support for database migrations
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
"""Unique constraints and indexes
Revision ID: ea566b5493e5
Revises: f3897e90455a
Create Date: 2023-12-18 16:00:07.059375
"""
from typing import Sequence, Union

from alembic import op

# revision identifiers, used by Alembic.
revision: str = "ea566b5493e5"
down_revision: Union[str, None] = "f3897e90455a"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.create_unique_constraint("plays_UQ1", "plays", ["game_id", "ingame_play_id"])
op.create_unique_constraint("tackles_UQ1", "tackles", ["play_id", "player_id"])
op.create_index(op.f("ix_tracking_play_id"), "tracking", ["play_id"], unique=False)
op.create_unique_constraint(
"tracking_UQ1", "tracking", ["play_id", "player_id", "frame"]
)
# ### end Alembic commands ###


def downgrade() -> None:
# ### commands auto generated by Alembic - please adjust! ###
op.drop_constraint("tracking_UQ1", "tracking", type_="unique")
op.drop_index(op.f("ix_tracking_play_id"), table_name="tracking")
op.drop_constraint("tackles_UQ1", "tackles", type_="unique")
op.drop_constraint("plays_UQ1", "plays", type_="unique")
# ### end Alembic commands ###
4 changes: 3 additions & 1 deletion nfl_bdb/database/models/play.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import TYPE_CHECKING, Optional

from sqlalchemy import ForeignKey
from sqlalchemy import ForeignKey, UniqueConstraint
from sqlalchemy.orm import Mapped, mapped_column, relationship

from nfl_bdb.database.models import Base
Expand Down Expand Up @@ -81,3 +81,5 @@ class Play(Base):

offensive_team: Mapped[Team] = relationship(Team, foreign_keys=[offensive_team_id])
los_team: Mapped[Team] = relationship(Team, foreign_keys=[los_team_id])

__table_args__ = (UniqueConstraint("game_id", "ingame_play_id", name="plays_UQ1"),)
4 changes: 3 additions & 1 deletion nfl_bdb/database/models/tackle.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import TYPE_CHECKING

from sqlalchemy import ForeignKey
from sqlalchemy import ForeignKey, UniqueConstraint
from sqlalchemy.orm import Mapped, mapped_column, relationship

from nfl_bdb.database.models import Base
Expand All @@ -24,3 +24,5 @@ class Tackle(Base):

play: Mapped["Play"] = relationship()
player: Mapped["Player"] = relationship()

__table_args__ = (UniqueConstraint("play_id", "player_id", name="tackles_UQ1"),)
8 changes: 6 additions & 2 deletions nfl_bdb/database/models/tracking.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import datetime
from typing import Optional

from sqlalchemy import ForeignKey
from sqlalchemy import ForeignKey, UniqueConstraint
from sqlalchemy.orm import Mapped, mapped_column, relationship

from nfl_bdb.database.models import Base
Expand All @@ -16,7 +16,7 @@ class TrackingPoint(Base):
player_id: Mapped[Optional[int]] = mapped_column(
ForeignKey("players.player_id"), nullable=True
)
play_id: Mapped[int] = mapped_column(ForeignKey("plays.play_id"))
play_id: Mapped[int] = mapped_column(ForeignKey("plays.play_id"), index=True)
frame: Mapped[int] = mapped_column()

x: Mapped[float] = mapped_column()
Expand All @@ -36,3 +36,7 @@ class TrackingPoint(Base):

player: Mapped[Optional[Player]] = relationship()
play: Mapped[Play] = relationship()

__table_args__ = (
UniqueConstraint("play_id", "player_id", "frame", name="tracking_UQ1"),
)

0 comments on commit 1729b25

Please sign in to comment.